package com.gluck.cases.common.utils.enums;

import com.gluck.cases.common.utils.constants.ErrorLevels;
import com.gluck.cases.common.utils.constants.ErrorTypes;

/**
 * @ClassName GluckStockSerErrorEnum
 * @Desc 业务异常码枚举类型
 * @Author I am Gluck
 * @Date 2022/4/28 - 4:40 下午
 **/
public enum BizSerErrorEnum {

    /**
     * 系统错误
     */
    SYSTEM_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "000", "系统内部错误")
    ,PARAMS_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "001", "请求参数错误")
    ,STATUS_ILLEGAL(ErrorLevels.WARN, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "002", "状态非法")
    ,MSGBROKER_ERROR(ErrorLevels.WARN, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "006", "消息处理错误")
    ,THIRD_ERROR(ErrorLevels.WARN, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "007", "第三方调用错误")
    ,AUTH_LIST_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "008", "权限列表错误")
    ,CLASS_NOT_FOUND_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "009", "ClassNotFoundException异常")
    ,FILTER_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "010", "过滤器未知错误")
    ,SCAN_PACKAGE_NOT_FOUND(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "011", "没有扫描到包")
    ,SCAN_PACKAGE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "012", "扫描到包错误")
    ,DOWNLOAD_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "013", "文件下载出错")
    ,FILE_NOT_EXISTS(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "014", "文件没有识别到!")
    ,EXCEL_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "015", "Excel错误!")
    /**
     * 业务错误
     */
    ,REQUEST_PARAMS_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "100", "请求参数异常")
    ,NOT_SEARCH_STOCK_DATA(ErrorLevels.WARN, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "101", "没有查询到股票基本信息")
    ,UPDATE_STOCK_DATA_ERROR(ErrorLevels.WARN, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "102", "数据更新失败")
    ,CREATE_USER_ERROR(ErrorLevels.WARN, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "103", "新增用户失败")
    /**
     * i/o错误
     */
    ,SERIALIZABLE_ERROR(ErrorLevels.WARN, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "200", "Serializable序列化出现IOException异常")
    /**
     * Db错误
     */
    ,INSERT_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "501", "数据插入失败")
    ,SELECT_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "502", "数据查询异常")
    ,UPDATE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "503", "数据更新异常")
    ,DELETE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "504", "数据删除异常")
    ,DATA_UNIQUE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "505", "数据已存在，不能重复插入")
    ,DATA_NOT_FOUND(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "506", "查询数据不存在")
    /**
     * cache错误
     */
    ,CACHE_GET_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "601", "获取缓存异常")
    ,CACHE_CLOSE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "602", "关闭缓存异常")
    ,CACHE_GET_OBJECT_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "603", "获取缓存对象异常")
    ,CACHE_SET_OBJECT_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "604", "设置缓存对象异常")
    ,CACHE_SET_JSON_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "605", "设置json缓存异常")
    ,CACHE_DELETE_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "606", "删除缓存异常")
    ,CACHE_EXIST_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "607", "exists缓存异常")
    ,CACHE_SEARCH_KEYS_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "608", "查询缓存keys异常")
    ,CACHE_FUZZY_SEARCH_KEYS_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "609", "查询模糊查询缓存keys异常")
    ,CACHE_TTL_ERROR(ErrorLevels.ERROR, ErrorTypes.SYSTEM, BizSerErrorEnum.SYSTEM, "610", "查询缓存keys异常")
    /**
     * 认证错误
     */
    ,BUILD_SIGN_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "901", "生成签名错误")
    ,GET_CLAIM_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "902", "解密公共信息异常")
    ,VERIFY_TOKEN_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "903", "校验token异常")
    ,TOKEN_NOT_FOUND(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "904", "token 不能为空")
    ,ADMIN_USER_NOT_FOUND(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "905", "没有查询到该用户")
    ,TOKEN_OVER_TIME(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "906", "Token已过期(Token expired or incorrect.)")
    ,AUTHORIZING_REALM_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "907", "AuthorizingRealm token 校验异常")
    ,TOKEN_OR_SECRET_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "908", "JWT的AccessToken认证失败(Token或者密钥不正确)")
    ,TOKEN_FILTER_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "909", "isAccessAllowed filter 认证失败")
    ,EN_CRYPTO_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "910", "加密失败")
    ,DE_CRYPTO_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "911", "解密失败")
    ,DISASSOCIATE_PERMISSION_BY_ROLE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "912", "解除关联失败")
    ,CUURENT_USER_NEED_LOGIN(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "913", "当前用户未登陆")

    /**
    * AdminRole Error
    *
    */
    ,ADMIN_ROLE_ASSOCIATE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1101", "admin_role 关联异常")
    ,ADMIN_ROLE_UPDATE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1102", "admin_role 更新异常")

    /**
     * AdminUser Error
     *
     */
    ,ADMIN_USER_ADD_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1201", "用户插入异常")
    ,ADMIN_USER_DEL_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1202", "用户删除异常")
    ,ADMIN_USER_CHANGE_PASS_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1203", "用户更新密码异常")

    /**
     * Cases api Error
     *
     */
    ,CASES_API_UPDATE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1501", "测试用例信息更新异常")
    ,CASES_API_DELETE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1502", "测试用例信息删除异常")
    ,CASES_API_ADD_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1503", "测试用例信息新增异常")

    /**
     * CasesGroup Error
     *
     */
    ,CASES_GROUP_UPDATE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1601", "测试用例分组更新异常")
    ,CASES_GROUP_ADD_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1602", "测试用例分组新增异常")
    ,CASES_GROUP_DELETE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1603", "测试用例分组删除异常")
    /**
     * casestest Error
     *
     */
    ,CASES_TESTS_ADD_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1701", "测试用例分组信息新增异常")
    ,CASES_TESTS_UPDATE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1702", "测试用例分组信息更新异常")
    ,CASES_TESTS_DELTE_ERROR(ErrorLevels.ERROR, ErrorTypes.BIZ, BizSerErrorEnum.COMMON, "1703", "测试用例分组信息删除异常")
    ;




    /**
     * 系统错误
     */
    private static final String SYSTEM = "0000";

    /**
     * 公共错误
     */
    private static final String COMMON = "1000";
    /**
     * 第三方错误
     */
    private static final String THIRD_PARTY = "2000";
    /**
     * 错误等级
     */
    private final String errorLevel;

    /**
     * 错误类型
     */
    private final String errorType;

    /**
     * 报错场景
     */
    private final String errorScene;

    /**
     * 错误编码
     */
    private final String errorCode;

    /**
     * 错误信息
     */
    private final String errorMsg;

    BizSerErrorEnum(String errorLevel, String errorType, String errorScene, String errorCode, String errorMsg) {
        this.errorLevel = errorLevel;
        this.errorType = errorType;
        this.errorScene = errorScene;
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    /**
     * 获取错误编码 按照支付宝规范来
     * @param errorLevel
     * @param errorType
     * @param errorScene
     * @param errorCode
     * @return
     */
    public static String getGluckStockErrorCode(String errorLevel, String errorType, String errorScene, String errorCode){
        return "GS" + errorLevel + errorType + errorScene + errorCode;
    }

    public String getGluckStockErrorCode(){
        return getGluckStockErrorCode(errorLevel, errorType, errorScene, errorCode);
    };

    public String getErrorLevel() {
        return errorLevel;
    }

    public String getErrorType() {
        return errorType;
    }

    public String getErrorScene() {
        return errorScene;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
}
